package com.example.fmmall.service.impl;

import com.example.fmmall.dao.UsersMapper;
import com.example.fmmall.entity.Users;
import com.example.fmmall.service.UserService;
import com.example.fmmall.utils.MD5Utils;
import com.example.fmmall.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.SecurityProperties;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import java.util.Date;
import java.util.List;

/**
 * Date:2022/1/27
 * Author:Sun
 * Description:
 * Note:
 */
@Service
//无论多少个线程，spring容器中就一个对象；UserService要注入到controller中，controller是单例也可以。
//@Scope("singleton")
public class UserServiceImpl implements UserService {

    //@Resource
    //private UserDao userDao;

    //@Override
    //public ResultVO checkLogin(String name, String pwd) {
    //
    //    //1、根据账号查询信息
    //    User user = userDao.queryUserByName(name);
    //
    //    //2、判断
    //    if (user == null) {
    //        //用户名不存在
    //        return new ResultVO(10001, "用户名字不存在", null);
    //    } else {
    //        //3、输入的密码进行加密，使用加密后的密码和user中的密码匹配
    //        if (user.getUserPassword().equals(pwd)) {
    //            //验证成功
    //            return new ResultVO(10000,"登录成功",user);
    //        } else {
    //            //密码错误
    //            return new ResultVO(10001,"密码错误",null);
    //        }
    //    }
    //
    //}

    //此时要在mapper的UserDao增加@Repository，否则会报红。
    @Autowired
    private UsersMapper usersMapper;

    @Override
    @Transactional
    public ResultVO userResgist(String name, String pwd) {

        //Spring容器默认是单例，所以这里可以锁this。
        synchronized (this) {
            //1、根据用户查询，这个用户是否已经被注册。
            Example example = new Example(Users.class);
            Example.Criteria criteria = example.createCriteria();
            criteria.andEqualTo("username", name);
            List<Users> users = usersMapper.selectByExample(example);

            //2、如果没有被注册则进行保存操作
            if (users.size() == 0) {
                String md5Pwd = MD5Utils.md5(pwd);
                Users user = new Users();

                user.setUsername(name);
                user.setPassword(md5Pwd);
                //默认图片
                user.setUserImg("img/default.png");
                user.setUserRegtime(new Date());
                user.setUserModtime(new Date());
                //insertUseGeneratedKeys主键回填
                int i = usersMapper.insertUseGeneratedKeys(user);

                if (i > 0) {
                    return new ResultVO(10000, "注册成功", user);
                } else {
                    return new ResultVO(10001, "注册失败", null);
                }

            } else {
                return new ResultVO(10001, "用户名已经被注册！", null);
            }
        }

    }

    @Override
    public ResultVO checkLogin(String name, String pwd) {

        Example example = new Example(Users.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("username", name);
        List<Users> users = usersMapper.selectByExample(example);

        if (users.size() ==0) {
            return new ResultVO(10001, "用户名不存在！", null);
        } else {
            String md5Pwd = MD5Utils.md5(pwd);
            if (md5Pwd.equals(users.get(0).getPassword())) {
                return new ResultVO(10000, "登录成功！", users.get(0));
            } else {
                return new ResultVO(10001, "登录失败，密码错误！", null);
            }
        }
    }

}
